#ifndef __SOFT_SPI_H
#define __SOFT_SPI_H

#include "stm32f4xx_hal.h"

/* FreeRTOS Kernel includes. */
#include "FreeRTOS.h"
#include "task.h"

#define SPI_MODE_0  0
#define SPI_MODE_3  1

#define SPI1_NSS_PORT             GPIOA
#define SPI1_NSS_PIN              GPIO_PIN_4
#define SPI1_NSS_CLK_ENABLE()     __HAL_RCC_GPIOA_CLK_ENABLE()
#define SPI1_CLK_PORT             GPIOA
#define SPI1_CLK_PIN              GPIO_PIN_5
#define SPI1_CLK_CLK_ENABLE()     __HAL_RCC_GPIOA_CLK_ENABLE()
#define SPI1_MISO_PORT            GPIOA
#define SPI1_MISO_PIN             GPIO_PIN_6
#define SPI1_MISO_CLK_ENABLE()    __HAL_RCC_GPIOA_CLK_ENABLE()
#define SPI1_MOSI_PORT            GPIOA
#define SPI1_MOSI_PIN             GPIO_PIN_7
#define SPI1_MOSI_CLK_ENABLE()    __HAL_RCC_GPIOA_CLK_ENABLE()

#define SPI1_NSS_H    HAL_GPIO_WritePin(SPI1_NSS_PORT,SPI1_NSS_PIN,GPIO_PIN_SET)
#define SPI1_NSS_L    HAL_GPIO_WritePin(SPI1_NSS_PORT,SPI1_NSS_PIN,GPIO_PIN_RESET)
#define SPI1_CLK_H    HAL_GPIO_WritePin(SPI1_CLK_PORT,SPI1_CLK_PIN,GPIO_PIN_SET)
#define SPI1_CLK_L    HAL_GPIO_WritePin(SPI1_CLK_PORT,SPI1_CLK_PIN,GPIO_PIN_RESET)
#define SPI1_MOSI_H   HAL_GPIO_WritePin(SPI1_MOSI_PORT,SPI1_MOSI_PIN,GPIO_PIN_SET)
#define SPI1_MOSI_L   HAL_GPIO_WritePin(SPI1_MOSI_PORT,SPI1_MOSI_PIN,GPIO_PIN_RESET)
#define SPI1_MISO     HAL_GPIO_ReadPin(SPI1_MISO_PORT,SPI1_MISO_PIN)

/*SPI Init*/
void Spi_Init(void);
void SpiWriteByte_Software(uint8_t c);
uint8_t SpiReadByte_Software(void);

#endif/*__SOFT_SPI_H*/
